#include "EstadoDeRefuerzoYReubicacion.h"
#include "JuegoServerImp.h"

EstadoDeRefuerzoYReubicacion::EstadoDeRefuerzoYReubicacion(RealizacionDePartida* realizacionDePartida)
{
	this->realizacionDePartida = realizacionDePartida;
}

void EstadoDeRefuerzoYReubicacion::reforzarEjercitos(Jugador* jugador) {
		
	//Agrego ejercitos en funcion de la cantidad de territorios controlados.
	unsigned int numeroDeEjercitos = (realizacionDePartida->getJuego()->getMapa()->getTerritoriosEnPoderDeJugador(jugador->getColor()) / 3);
	if (numeroDeEjercitos < 3)
		numeroDeEjercitos = 3;
	//Agrego ejercitos en funcion de la cantidad de continentes ocupados.
	map<string,Continente*>* continentes = realizacionDePartida->getJuego()->getMapa()->obtenerContinentes();
	for (map<string,Continente*>::iterator it = continentes->begin(); it != continentes->end(); it++)
		if (it->second->enPoderDeJugador(jugador->getColor()))
			numeroDeEjercitos += it->second->getBonus();
	
	jugador->asignarEjercitos(numeroDeEjercitos);
	
}

void EstadoDeRefuerzoYReubicacion::colocarEjercitos(Jugador* jugador, Territorio* territorio, unsigned int cantidadDeEjercitos) {
	if (territorio->getEnPoderDe() == jugador->getColor()) {
		territorio->colocarEjercitos(cantidadDeEjercitos,jugador->getColor());
		jugador->quitarEjercitos(cantidadDeEjercitos);
	}
//	else
//		;//Arrojar Excepcion
	if (jugador->getCantidadDeEjercitos() == 0)
		realizacionDePartida->setEstado(realizacionDePartida->getEstadoDeAtaque());
}

void EstadoDeRefuerzoYReubicacion::realizarAtaque(Ataque* ataque) {
	std::cerr<<"Esta accion no es valida para este estado"<<std::endl;
}
	
void EstadoDeRefuerzoYReubicacion::moverEjercitos(Jugador* jugador, Territorio* origen, Territorio* destino, unsigned int cantidadDeEjercitos) {
	std::cerr<<"Esta accion no es valida para este estado"<<std::endl;
}

EstadoDeRefuerzoYReubicacion::~EstadoDeRefuerzoYReubicacion()
{
}
